<?php

/**
 * 默认控制器
 */
class Controller_Default extends Controller_Abstract
{
    /* ******************************************************************** */
    function actionDo()
    {
        $show_box['title'] = '测试操作';
            dump($_SESSION);
    }

    /* ******************************************************************** */
    function actionIndex()
    {
        $show_box['title'] = '默认首页';
        if ($this->_app->currentUserRoles())
        {
            // 如果已经登录，就转到任务列表页面
            $show_box['ncArrs'] = Helper_Permissions::getNamespaceControllerArrs();
            $this->_view['show_box'] = $show_box;
        }
        else
        {
            // 未登录则转到登录页面
            return $this->_redirect(url('default/login'));
        }
    }

    /* ******************************************************************** */
    function actionLogin()
    {
        $show_box['title'] = '登录系统';
        $show_box['form'] = new Form_UserLogin(url('default/login'));
        $show_box['form']->_subject = $show_box['title'];
        if ($this->_context->isPOST() && $show_box['form']->validate($_POST))
        {
            try
            {
                // 使用 acluser 插件的 validateLogin() 方法验证登录并取得有效的 user 对象
                $user = Admin_Users::meta()->validateLogin($show_box['form']['account']->value, $show_box['form']['password']->value);
                $userInfo = $user->aclData();
                if ( $userInfo['is_locked'] ){ 
                //判断用户是否被锁定
                    $show_box['form']['account']->invalidate("被锁定的用户，请与管理员联系。");
                }else{
                    // 获取用户权限组，并将登录用户的信息存入 SESSION，以便应用程序记住用户的登录状态
                        //用扩展的函数获取用户权限，直接判定用户的权限，并根据用户的状态进行角色转换
                    $Helper_Acl = new Helper_Acl;
                    $user_AllRoles = $Helper_Acl->UserAclRoles($userInfo['user_id']);
                    $this->_app->changeCurrentUser($user->aclData(), $user_AllRoles);
                    // 登录成功后，重定向浏览器
                    return $this->_redirectMessage(
                        '登录成功', 
                        '您已经成功登录。登录后可以创建和修改任务列表。',
                        url('default/index'));
                }
            }
            catch (AclUser_UsernameNotFoundException $ex)
            {
                $show_box['form']['account']->invalidate("您输入的用户名 {$show_box['form']['account']->value} 不存在");
            }
            catch (AclUser_WrongPasswordException $ex)
            {
                $show_box['form']['password']->invalidate("您输入的密码不正确");
            }
        }
        $this->_view['show_box'] = $show_box;
        $this->_viewname = 'index';
    }

    /* ******************************************************************** */
    function actionLogout()
    {
        $show_box['title'] = '注销系统';
        $this->_app->cleanCurrentUser();
        return $this->_redirectMessage(
            '退出登录', 
            '您已经退出了登录状态，谢谢使用。',
            url('default/index'));
    }

    /* ******************************************************************** */
    function actionRegister()
    {
        $show_box['title'] = '会员注册';
        // 构造表单对象
        $form = new Form_UserReg(url('default/register'));
        if ($this->_context->isPOST() && $form->validate($_POST))
        {
            // 是 POST 提交，并且表单验证通过
            try
            {
                // 创建 User 对象并保存
                $user = new Admin_Users($form->values());
                // 自动添加用户的默认组
                $user->roles[] = Admin_Roles::find('rolename = ?', 'UNCHECKED')->query();
                $user->save();
                // 成功后重定向到登录页面
                return $this->_redirectMessage(
                    '注册新用户', 
                    '您的新帐户已经注册成功，请输入用户名和密码登录。',
                    url('default/login'));
            }
            catch (AclUser_DuplicateUsernameException $ex)
            {
                // 捕获 AclUser_DuplicateUsernameException 异常，在表单中指出用户名存在重复问题
                $form['account']->invalidate("您要注册的帐号 {$user->account} 已经存在了");
            }
        }
        // 将表单对象传递给视图
        $this->_view['form'] = $form;
        $this->_viewname = 'form';
    }

    /* ******************************************************************** */
    function actionChangePasswd()
    {
        $show_box['title'] = '修改密码';
        $form = new Form_ChangePasswd(url('default/changepasswd'));

        if ($this->_context->isPOST() && $form->validate($_POST))
        {
            try
            {
                // 取得当前用户的信息
                $current_user = $this->_app->currentUser();
                // 修改密码
                Admin_Users::meta()->changePassword($current_user['account'], $form['new_password']->value, $form['old_password']->value);
                // 重定向浏览器
                return $this->_redirectMessage(
                    '修改密码成功', 
                    '您的登录密码已经成功修改，下次登录请使用新密码。',
                    url('default/index'));
            }
            catch (AclUser_WrongPasswordException $ex)
            {
                $form['old_password']->invalidate('您输入的现用密码不正确');
            }
        }

        $this->_view['form'] = $form;
        $this->_viewname = 'form';
    }

   
}